package com.qf.drtest;

import com.qf.drtest.utils.ThreadPoolUtils;

import java.io.IOException;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutionException;

/*
    JDK8的新特性:
        Lambda表达式
        接口支持默认方法
        Stream流/函数式接口
        HashMap JDK1.8
        ConcurrentHashMap JDK1.8
        JVM: 方法区-->元空间

        CompletableFuture
 */
public class MainTest3 {
    public static void main(String[] args) throws InterruptedException, ExecutionException, IOException {
        //执行异步任务（内部也是基于线程池完成），多个人物之间可以实现等待
//        CompletableFuture.runAsync(()->{
//            try {
//                Thread.sleep(2000);
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
//            System.out.println(123);
//        }); //get方法是等待
//
//        System.out.println("22222");
//
//        System.in.read();

        long start = System.currentTimeMillis();

        CompletableFuture.allOf(CompletableFuture.runAsync(()->{
            //煮饭
            try {
                Thread.sleep(2000);

                System.out.println("煮饭....");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        },ThreadPoolUtils.tp()),CompletableFuture.runAsync(()->{
            //炒菜
            try {
                Thread.sleep(1000);

                System.out.println("炒菜....");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        },ThreadPoolUtils.tp())).get();

        //这个开吃的代码应该等待煮饭和炒菜都完成后，才执行（线程间通讯）
        long end = System.currentTimeMillis();
        //开吃
        System.out.println("开吃.... 耗时：" + (end-start)) ;

    }

}
